package com.dd.shop4j.common.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

/**
 * BaseMapper 对应生成的Mapper.xml文件
 * 
 * @author tangshu
 * 
 * @param <Entity>
 *            实体bean
 * @param <Pk>
 *            主键
 */
public interface IBaseMapper<Entity, Pk> {

	/**
	 * 添加实体
	 * 
	 * @param entity
	 * @return 影响行数
	 */
	public int insertSelective(Entity entity);

	/**
	 * 根据主键修改实体 不需要修改的字段设置为null
	 * 
	 * @param entity
	 * @return 影响行数
	 */
	public int updateSelectiveByPrimaryKey(Entity entity);

	/**
	 * 根据主键修改实体
	 * 
	 * @param entity
	 * @return 影响行数
	 */
	public int updateByPrimaryKey(Entity entity);

	/**
	 * 根据主键删除实体
	 * 
	 * @param pk
	 * @return 影响行数
	 */
	public int deleteByPrimaryKey(Pk pk);

	/**
	 * 根据主键批量删除实体
	 * 
	 * @param pk
	 * @return 影响行数
	 */
	public int deleteByPrimaryKeys(Pk[] pk);

	/**
	 * 根据主键得到实体
	 * 
	 * @param pk
	 */
	public Entity selectByPrimaryKey(Pk pk);

	/**
	 * 分页查询
	 * 
	 * @param entity
	 *            查询条件
	 * @param start
	 *            开始索引
	 * @param limit
	 *            记录数
	 * @param orderby
	 *            排序字段
	 * @param orderType
	 *            排序类型
	 * @return
	 */
	public List<Entity> queryPageBySelective(@Param("entity") Entity entity,
			@Param("start") int start, @Param("limit") int limit,
			@Param("orderby") String orderby,
			@Param("orderType") String orderType);

	/**
	 * 查询分页的行数
	 * 
	 * @param entity
	 */
	public int getCountBySelective(@Param("entity") Entity entity);

	/**
	 * 条件查询 查询所有传空值
	 * 
	 * @param entity
	 */
	public List<Entity> queryBySelective(Entity entity);
}
